//////////////////////////////////////////////////////////////////////////
//
// GAM203
// Camera class
// Camera.h
// 
// Scott Taylor
// Qantm College
//
//////////////////////////////////////////////////////////////////////////

#ifndef CAMERA_H
#define CAMERA_H

#include "ABCamera.h"

class Camera : public ABCamera
{
public:
	Camera();
	virtual ~Camera();

	//////////////////////////////////////////////////////////////////////////
	// Update the camera. If it is attached or tracked, it will make movements
	//
	// Paramaters:
	// a_dt, the delta time
	//
	// Returns void
	//
	//////////////////////////////////////////////////////////////////////////
	virtual void Update(float a_dt);

	//////////////////////////////////////////////////////////////////////////
	// Get the view matrix of the camera
	//
	// Paramaters:
	// a_outViewMat, an out matrix that the view matrix is set to
	//
	// Returns void
	//
	//////////////////////////////////////////////////////////////////////////
	virtual void GetViewMatrix(D3DXMATRIX& a_outViewMat);

	//////////////////////////////////////////////////////////////////////////
	// Get the up vector of the camera, as the camera doesn't roll, it is
	// (0,1,0)
	//
	// Paramaters:
	// None
	//
	// Returns D3DXVECTOR3(0,1,0)
	//
	//////////////////////////////////////////////////////////////////////////
	D3DXVECTOR3 GetUpVec() const;

	//////////////////////////////////////////////////////////////////////////
	// Set the target position of the camera
	//
	// Paramaters:
	// a_target, the new position of the target
	//
	// Returns void
	//
	//////////////////////////////////////////////////////////////////////////
	void SetTargetPos(const D3DXVECTOR3& a_target) { m_targetPos = a_target; }

	//////////////////////////////////////////////////////////////////////////
	// Get the target position of the camera
	//
	// Paramaters:
	// None
	//
	// Returns a constant vector of the target position
	//
	//////////////////////////////////////////////////////////////////////////
	const D3DXVECTOR3& GetTargetPos() const { return m_targetPos; }

private:
	// Target position in world space
	D3DXVECTOR3 m_targetPos;  
};

#endif  // CAMERA_H
